#include "ViewPort.h"

namespace VIS
{
	CViewPort::CViewPort(void):m_Radius(6378.0), m_Size(100,100)
	{
	}


	CViewPort::~CViewPort(void)
	{
	}

	float CViewPort::Radius() const
	{
		return m_Radius;
	}

	int CViewPort::Width() const
	{
		return m_Size.GetWidth();
	}

	int CViewPort::Height() const
	{
		return m_Size.GetHeight();
	}

	wxSize CViewPort::Size() const
	{
		return m_Size;
	}

	int CViewPort::NumXTiles() const
	{
		return m_NumXTiles;
	}

	int CViewPort::NumYTiles() const
	{
		return m_NumYTiles;
	}

	void CViewPort::SetRadius(float _radius)
	{
		m_Radius = _radius;
	}

	void CViewPort::SetWidth(int _w)
	{
		m_Size.SetWidth(_w);
	}

	void CViewPort::SetHeight(int _h)
	{
		m_Size.SetHeight(_h);
	}

	void CViewPort::SetNumXTiles(int _nx)
	{
		m_NumXTiles = _nx;
	}

	void CViewPort::SetNumYTiles(int _ny)
	{
		m_NumYTiles = _ny;
	}

	void CViewPort::VertCoord(float _lon, float _lat, float &_x, float &_y, float &_z)
	{
		VertCoordNorm(_lon, _lat, _x, _y, _z);
		_x *= Radius();
		_y *= Radius();
		_z *= Radius();
	}

	void CViewPort::VertCoordNorm(float _lon, float _lat, float &_x, float &_y, float &_z)
	{
		float lat_rad, lon_rad;
		lat_rad = _lat*DEG2RAD;
		lon_rad = _lon*DEG2RAD;
		float cosLat = cos(lat_rad);
		_x = cosLat*sin(lon_rad);
		_y = sin(lat_rad);
		_z = cosLat*cos(lon_rad);
	}

	void CViewPort::VertCoord(float _lon, float _lat, float _alt, float &_x, float &_y, float &_z)
	{
		VertCoordNorm(_lon, _lat, _x, _y, _z);
		float r = Radius() + _alt;
		_x *= r;
		_y *= r;
		_z *= r;
	}


}